package com.myinternet.lutu.modal;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;

public class LessJsonResult {

    /**
     * @description 自定义响应数据结构
     *  			这个类是提供给门户，ios，安卓，微信商城用的
     *  			门户接受此类数据后需要使用本类的方法转换成对于的数据类型格式（类，或者list）
     *  			其他自行处理
     *  			200：表示成功
     *  			500：表示错误，错误信息在msg字段中
     *  			501：bean验证错误，不管多少个错误都以map形式返回
     *  			502：拦截器拦截到用户token出错
     *  			555：异常抛出信息
     * @Auther saiys
     * @date 2020/2/21
     *
     * MAPPER {ObjectMapper对象} ObjectMapper对象
     * status {Integer} 业务状态码
     * msg {String} 响应消息
     * data {Object}响应的数据
     * ok {String} 成功标识
     */
    private static final ObjectMapper MAPPER = new ObjectMapper();
    private Integer status;
    private String msg;
    private Object data;

    @JsonInclude(JsonInclude.Include.NON_NULL)//为空时，忽略
    private String ok;

    public LessJsonResult(Integer status, String msg, Object data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public LessJsonResult(Object data) {
        this.status = 200;
        this.msg = "OK";
        this.data = data;
    }

    public static LessJsonResult build(Integer status, String msg, Object data) {
        return new LessJsonResult(status, msg, data);
    }

    public static LessJsonResult ok(Object data) {
        return new LessJsonResult(data);
    }

    public static LessJsonResult errorMsg(String msg) {
        return new LessJsonResult(500, msg, null);
    }

    public static LessJsonResult errorMap(Object data) {
        return new LessJsonResult(501, "error", data);
    }

    public static LessJsonResult errorTokenMsg(String msg) {
        return new LessJsonResult(502, msg, null);
    }

    public static LessJsonResult errorException(String msg) {
        return new LessJsonResult(555, msg, null);
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getOk() {
        return ok;
    }

    public void setOk(String ok) {
        this.ok = ok;
    }
}
